import { get, post, postWithQueryParams } from "@/api/request";

/**
 * 签证单控制器 / 签证单控制器添加
 * @param {object} data
 * @param {array<附件传输实体>} [data.attachmentList] 附件
 * @param {string} [data.ccUnit] 抄送单位
 * @param {string} [data.constructionUnit] 施工单位
 * @param {number} [data.contractId] 合同id
 * @param {array<VisaFormDetail创建传输实体>} [data.detailList] 签证单明细
 * @param {number} [data.influenceDuration] 影响工期(天)
 * @param {boolean} [data.isInfluenceDuration] 是否影响工期(0 否 1 是)
 * @param {string} [data.mainDeliveryUnit] 主送单位
 * @param {number} [data.menuId] 菜单id
 * @param {number} [data.projectPlanningId] 项目规划id
 * @param {array<string>} [data.visaApplicantList] 签证提出方
 * @param {string} [data.visaContent] 签证内容
 * @param {string} [data.visaName] 签证名称
 * @param {string} [data.visaNumber] 签证编号
 * @param {string} [data.visaReason] 签证原因
 * @param {string} [data.visaType] 签证类型
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<VisaForm页面展示实体>}
 * @author 肖玮
 */
export function visaFormAdd(data, config) {
  return post("/visaForm/add", data, config);
}

/**
 * 签证单控制器 / 签证单控制器删除
 * @param {object} params
 * @param {object} data
 * @param {number} params.id ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<VisaForm页面展示实体>}
 * @author 肖玮
 */
export function visaFormDelete(params, data, config) {
  return postWithQueryParams("/visaForm/delete", params, data, config);
}

/**
 * 签证单控制器 / 签证单控制器查询详情
 * @param {object} params
 * @param {number} params.id ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<VisaForm页面展示实体>}
 * @author 肖玮
 */
export function visaFormDetail(params, config) {
  return get("/visaForm/detail", params, config);
}

/**
 * 签证单控制器 / 签证单控制器导出
 * @param {object} data
 * @param {string} [data.endCreateDate] 上报结束日期 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.menuId] 菜单id
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.startCreateDate] 上报开始日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.visaName] 签证名称
 * @param {string} [data.visaNumber] 签证编号
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise}
 * @author 肖玮
 */
export function visaFormExport(data, config) {
  return post("/visaForm/export", data, config);
}

/**
 * 签证单控制器 / 签证单控制器分页查询
 * @param {object} data
 * @param {string} [data.endCreateDate] 上报结束日期 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.length] 分页大小
 * @param {number} [data.menuId] 菜单id
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.projectName] 项目名称
 * @param {number} [data.start] 查询记录起始下标
 * @param {string} [data.startCreateDate] 上报开始日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.visaName] 签证名称
 * @param {string} [data.visaNumber] 签证编号
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<VisaForm页面展示实体>>}
 * @author 肖玮
 */
export function visaFormPage(data, config) {
  return post("/visaForm/page", data, config);
}

/**
 * 签证单控制器 / 签证单控制器更新
 * @param {object} data
 * @param {array<附件传输实体>} [data.attachmentList] 附件
 * @param {string} [data.ccUnit] 抄送单位
 * @param {string} [data.constructionUnit] 施工单位
 * @param {number} [data.contractId] 合同id
 * @param {array<VisaFormDetail更新传输实体>} [data.detailList] 签证单明细
 * @param {number} [data.id] id
 * @param {number} [data.influenceDuration] 影响工期(天)
 * @param {boolean} [data.isInfluenceDuration] 是否影响工期(0 否 1 是)
 * @param {string} [data.mainDeliveryUnit] 主送单位
 * @param {number} [data.menuId] 菜单id
 * @param {number} [data.projectPlanningId] 项目规划id
 * @param {array<string>} [data.visaApplicantList] 签证提出方
 * @param {string} [data.visaContent] 签证内容
 * @param {string} [data.visaName] 签证名称
 * @param {string} [data.visaNumber] 签证编号
 * @param {string} [data.visaReason] 签证原因
 * @param {string} [data.visaType] 签证类型
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<VisaForm页面展示实体>}
 * @author 肖玮
 */
export function visaFormUpdate(data, config) {
  return post("/visaForm/update", data, config);
}

/**
 * 签证单控制器 / 签证单控制器校验签证单编号是否重复
 * @param {object} params
 * @param {object} data
 * @param {string} params.visaNumber 签证单编号
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<boolean>}
 * @author 肖玮
 */
export function visaFormVerifyNumberIsRepeat(params, data, config) {
  return postWithQueryParams("/visaForm/verifyNumberIsRepeat", params, data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} 附件传输实体 附件传输实体
 * @property {string} attUrl 附件url
 * @property {number} directoryId 目录id
 * @property {number} id 附件id
 * @property {string} originalName 原始文件名
 * @description 附件传输实体
 */

/**
 * @typedef {object} BusinessAttachDetailVO
 * @property {string} attKey 附件key
 * @property {number} attOrder 附件排序
 * @property {number} attSize 附件大小(单位:MB)
 * @property {string} attSizeString 附件大小
 * @property {string} attSuffix 附件后缀
 * @property {string} attUrl 附件url
 * @property {number} attachId 文件id
 * @property {number} attachmentType 文件类型
 * @property {number} businessId 业务ID
 * @property {string} businessType 业务类型
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {boolean} delFlag 删除标识(false:否, true:是)
 * @property {number} directoryId 目录id
 * @property {string} filename 文件名称
 * @property {number} id 附件ID
 * @property {string} originalName 原始文件名
 * @property {string} remark 备注
 * @property {string} updateTime 修改时间
 * @property {string} updateUser 修改用户
 */

/**
 * @typedef {object} VisaForm页面展示实体 签证单页面展示实体
 * @property {array<BusinessAttachDetailVO>} attachmentList 附件
 * @property {string} ccUnit 抄送单位
 * @property {string} constructionUnit 施工单位
 * @property {number} contractAmount 合同金额
 * @property {number} contractId 合同id
 * @property {string} contractName 合同名称
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {string} createUserName 创建用户名称
 * @property {number} declareAmount 申报金额/全部合计
 * @property {boolean} delFlag 是否已删除(0否；1是)
 * @property {number} departmentId 编制部门id
 * @property {string} departmentName 编制部门名称
 * @property {array<VisaFormDetail页面展示实体>} detailList 签证单明细
 * @property {number} finalAuditAmount 审定金额
 * @property {number} id
 * @property {number} influenceDuration 影响工期(天)
 * @property {boolean} isEdit 是否可以编辑
 * @property {boolean} isInfluenceDuration 是否影响工期(0 否 1 是)
 * @property {string} mainDeliveryUnit 主送单位
 * @property {number} menuId 菜单id
 * @property {string} projectName 项目名称
 * @property {number} projectPlanningId 项目规划id
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @property {array<string>} visaApplicantList 签证提出方
 * @property {string} visaContent 签证内容
 * @property {string} visaName 签证名称
 * @property {string} visaNumber 签证编号
 * @property {string} visaReason 签证原因
 * @property {string} visaType 签证类型
 * @description 签证单页面展示实体
 */

/**
 * @typedef {object} VisaFormDetail创建传输实体 签证单明细创建传输实体
 * @property {string} compilationDate 编制日期
 * @property {string} description 项目特征描述
 * @property {number} engineeringQuantity 工程量
 * @property {string} remarks 备注
 * @property {string} taskName 任务名称
 * @property {number} unitPrice 综合单价
 * @property {string} unitType 单位
 * @description 签证单明细创建传输实体
 */

/**
 * @typedef {object} VisaFormDetail更新传输实体 签证单明细更新传输实体
 * @property {string} compilationDate 编制日期
 * @property {string} description 项目特征描述
 * @property {number} engineeringQuantity 工程量
 * @property {number} id
 * @property {string} remarks 备注
 * @property {string} taskName 任务名称
 * @property {number} unitPrice 综合单价
 * @property {string} unitType 单位
 * @description 签证单明细更新传输实体
 */

/**
 * @typedef {object} VisaFormDetail页面展示实体 签证单明细页面展示实体
 * @property {string} compilationDate 编制日期
 * @property {string} createUser 创建用户
 * @property {string} createUserName 编制人姓名
 * @property {string} description 项目特征描述
 * @property {number} engineeringQuantity 工程量
 * @property {number} id
 * @property {string} remarks 备注
 * @property {string} taskName 任务名称
 * @property {string} taskNumber 任务编号
 * @property {number} totalAmount 小计
 * @property {number} unitPrice 综合单价
 * @property {string} unitType 单位
 * @property {string} unitTypeName 单位名称
 * @property {number} visaFormId 签证单id
 * @description 签证单明细页面展示实体
 */
